package com.softer.chengxin.person.controller;

import com.softer.chengxin.common.domin.Common;
import com.softer.chengxin.common.domin.CommonResult;
import com.softer.chengxin.common.domin.ManagerPageResult;
import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.person.domin.Person;
import com.softer.chengxin.person.service.PersonService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2018/9/27
 */
@RestController
@RequestMapping(value = "/api/WY_PersonBaseInfo")
public class PersonController {
    @Autowired
    private PersonService personService;

    /**
     * 查询企业主要人员
     *
     * @param duty    职务
     * @param session 缓存
     * @return 人员信息
     */
    @PostMapping("/queryMainPersonnel")
    public Person queryMainPersonnel(String duty, HttpSession session) {
        //查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new Person();
        }
        return personService.queryMainPersonnel(id, duty);
    }

    /**
     * 物业人员信息添加
     *
     * @param person 人员实体
     * @return 结果集
     */
    @PostMapping(value = "/add")
    public CommonResult addPerson(Person person, HttpSession session) {
        //查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        if (StringUtils.isBlank(person.getBirth())) {
            person.setBirth(null);
        }
        person.setCompanyId(String.valueOf(id));
        //获取项目ID
        String projectId = (String) session.getAttribute(Common.PROJECT_ID);
        if (StringUtils.isNotBlank(projectId)) {
            person.setProjectId(projectId);
        } else {
            person.setProjectId(Common.ZERO);
        }
        return personService.addPerson(person);
    }

    /**
     * 物业人员信息编辑
     *
     * @param person 人员实体
     * @return 处理结果
     */
    @PostMapping(value = "/edit")
    public CommonResult updatePerson(Person person, HttpSession session) {
        //查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        person.setCompanyId(String.valueOf(id));
        return personService.updatePerson(person);
    }

    /**
     * 分页查询企业人员列表
     *
     * @param page         页面信息
     * @param name         人员名字
     * @param departmentId 部门ID
     * @return 人员列表
     */
    @PostMapping("/queryPersonList")
    public ManagerPageResult queryPersonList(Page page, String name, Integer departmentId, HttpSession session) {
        // 查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new ManagerPageResult();
        }
        return personService.queryPersonList(page, id, name, departmentId);
    }

    /**
     * 根据人员Id查询人员详情
     *
     * @param id 人员Id
     * @return 人员详情
     */
    @PostMapping("/queryPersonById")
    public Person queryPersonById(Integer id) {
        return personService.queryPersonById(id);
    }

    /**
     * 刪除人员（将人员状态设为离职,离职状态设置为0）
     *
     * @param id   人员Id
     * @param type 删除类型（0离职，1从项目中删除）（字段废弃）
     * @return 处理结果
     */
    @PostMapping("/delete")
    public CommonResult delete(Integer id, Integer type) {
        if (id == null) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请选择要删除的人员");
        }
        return personService.delete(id, type);
    }

    /**
     * 删除从业人员
     *
     * @param id 人员ID
     * @return 处理结果
     */
    @PostMapping("/deletePerson")
    public CommonResult deletePerson(Integer id) {
        return personService.deletePerson(id);
    }

    /**
     * 查询企业所有人员，用于下拉列表
     *
     * @param name 姓名，用于模糊查询
     * @return 人员列表
     */
    @PostMapping("/queryAllPerson")
    public List<Person> queryAllPerson(HttpSession session, String name) {
        //查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new ArrayList<>();
        }
        return personService.queryAllPerson(name, id);
    }

    /**
     * 查询项目人员列表
     *
     * @param projectId 项目Id（前端创建的ID）
     * @return 人员列表
     */
    @PostMapping("/queryProjectPersonList")
    public ManagerPageResult queryProjectPersonList(Page page, String projectId, Person person) {
        return personService.queryProjectPersonList(page, projectId, person);
    }

    /**
     * 增加项目人员
     *
     * @param person    人员实体
     * @param projectId 项目ID（前端创建的ID）
     * @param session   缓存
     * @return 添加结果
     */
    @PostMapping("/addProjectPerson")
    public CommonResult addProjectPerson(Person person, String projectId, HttpSession session) {
        // 查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请登陆后操作");
        }
        if (StringUtils.isBlank(projectId)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请创建项目ID");
        }
        if (StringUtils.isBlank(person.getBirth())) {
            person.setBirth(null);
        }
        person.setCompanyId(String.valueOf(id));
        return personService.addProjectPerson(person, projectId);
    }

    /**
     * 人员调动
     *
     * @param id        人员ID
     * @param projectId 项目ID
     * @return 调动结果
     */
    @PostMapping("/mobilize")
    public CommonResult mobilize(Integer id, Integer projectId) {
        return personService.mobilize(id, projectId);
    }

}
